package com.hd123.rumba.gwt.widget2e.client.form;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.hd123.rumba.gwt.base.client.BWithUCN;
import com.hd123.rumba.gwt.widget2.client.grid.RPageData;
import com.hd123.rumba.gwt.widget2e.client.dialog.RBrowserDialog;

/**
 * RUCNBox回调
 * 
 * @author LiQi
 * 
 */
public interface RUCNCallback {

  /**
   * 需要根据用户输入的代码查询BWithUCN对象时触发。实现类应在本方法的实现中执行RPC调用，
   * 把code传给servlet，返回查询结果，注意返回的对象必须是BWithUCN。
   * 
   * @param code
   *          用户输入的代码
   * @param callback
   *          实现类应把callback直接作为自己RPC调用的callback
   */
  void queryByCode(String code, AsyncCallback<BWithUCN> callback);

  /**
   * 执行RPC调用获得浏览窗口展示用的数据集，数据集应为RPageData类型，其元素应为BWithUCN
   * 
   * @param page
   *          当前页序号，从0计数
   * @param pageSize
   *          每页记录数
   * @param sortField
   *          排序列，如果列上定义了数据字典，则为该列的数据字典中的字段名，否则为列标题。没有排序时为null。
   * @param sortDir
   *          排序方向，取值范围为RGrid.SORT_ASC和RGrid.SORT_DESC。没有排序时为null。
   * @param callback
   *          实现类应把callback作为RPC调用的回调
   */
  void fetchBrowserData(int page, int pageSize, String sortField, String sortDir,
      AsyncCallback<RPageData> callback);

  /**
   * 在浏览窗口表格中需要展示数据时触发
   * 
   * @param data
   *          包含当前行原始数据的对象
   * @param col
   *          表格列序号，不包含选择器列，从0计数，和
   *          {@link RBrowserDialog#getColumnCaptions()}的顺序对应。
   * @return 显示在表格中的字符串
   */
  String displayBrowserData(Object data, int col);
}
